iT邦幫忙

2025 iThome 鐵人賽

DAY 2
0
Cloud Native

我在 CKS 考完只拿 47% 後痛定思痛決定好好準備內容系列 第 2

[Day2] 1-1. Use Network security policies to restrict cluster level access

  • 分享至 

  • xImage
  •  

使用者訪問 cluster

以自建 kubeadm 為例,會需要在 iptables 上設定允許或者拒絕的 ip 來源

如果是使用 AWS 的 EKS 則是可以使用 cluster endpoint public access cidrs 的功能透過 Public 直接訪問,不過如果是在 Production 環境時建議透過跳板機的方式訪問 cluster。

這邊主要是設定網路連線而已,成功訪問後能否查看資源(kubectl get pods)則是透過 role, rolebinding 取得

Network Policy

透過 network policy 可以控制 pod 在 layer 3,4 的路由規則,主要可以分成(1) pod (2) namespace (3) ip block 等控制項,在沒有配置 ingress 以及 egress 時一率視爲允許,並且以 namespace 為控制單位
以下將直接以範例說明如何配置:

範例 1 參數說明

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy  # networkpolicy 名稱
  namespace: default         # 應用在哪個 namespace 上
spec:
  podSelector:               # 選擇要設定在哪個 pod 上
    matchLabels:     
      role: db
  policyTypes:               # policy types 只能設定 ingress 或者 egress
  - Ingress
  - Egress
  ingress:
  - from:                    # 如果是 ingress 下面要接 from,一個 from 只能對應一組port
    - ipBlock:               # 一個 - 代表一條規則,規則內的會是連集
        cidr: 172.17.0.0/16
        except:
        - 172.17.1.0/24
    - namespaceSelector:
        matchLabels:
          project: myproject
    - podSelector:
        matchLabels:
          role: frontend
    ports:
    - protocol: TCP         # 設定開放哪些port 如果沒有指定 port 會是 所有port
      port: 6379
  egress:
  - to:
    - ipBlock:
        cidr: 10.0.0.0/24
    ports:
    - protocol: TCP
      port: 5978

範例 2 預設 deny 所有 ingress

---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-ingress
spec:
  podSelector: {} # 代表選擇所有 pod
  policyTypes:
  - Ingress

範例 3 預設 allows 所有 ingress

---
# 該配置底下會允許所有的 ingress
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all-ingress
spec:
  podSelector: {}
  ingress:
  - {}
  policyTypes:
  - Ingress

範例 4 預設 deny 所有 ingress 以及 egress

---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress

範例 5 只允許訪問 internal service

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-external-egress
  namespace: default
spec:
  podSelector: {} 
  policyTypes:
  - Egress
  egress:
  - to:
    - namespaceSelector: {}
      podSelector: {}

參考資料
cluster endpoint public access cidrs


上一篇
[Day1] 故事的起源
下一篇
[Day3] 1-2. Use CIS benchmark to review the security configuration of Kubernetes components
系列文
我在 CKS 考完只拿 47% 後痛定思痛決定好好準備內容5
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言